#ifndef __LISTWINDOW_H
#define __LISTWINDOW_H
#include "yawl.h"
#include "options.h"

#include <string>
//using std::string;

const int MAX_WINDOWS = 40;

class ItemObject {
public:
    virtual bool action() { return true; }
	virtual ~ItemObject() {}
    virtual void as_str(string& s) { }
};

class ListWindow: public TEventWindow {
	TListBox* m_ls;
    bool m_is_editable, m_clear_list;
public:
    ListWindow(const char* caption, bool clear_list=true);

    // overriden behaviour
    void size();
    void keydown(int vkey);

    void on_list_click(int code);
	void clear();

    void set_editable();
    ItemObject* data(int idx);
    int  count();
    void redraw(bool yesno);
    void update_item_text(int idx, string text);
    void update_item(int idx);
	void add(string s, ItemObject* obj);
    void add(ItemObject* obj);
	void split_text(string s, char delim);
    void attempt_insert(int idx = -1);

	// overrideables
    virtual void double_clicked(int idx, ItemObject* obj) { }
	virtual void update();
	virtual void fill_list();
    virtual ItemObject* on_insert(int idx)                 { return NULL; }
    virtual bool        on_delete(int idx,ItemObject* obj) { return true; }
};

class WindowList {
	TWin* m_windows[MAX_WINDOWS];
	int  m_count;
	IniFile* m_ini;
    FormOptions* m_file_bounds;
    bool m_visible;
public:
	WindowList(IniFile* ini);
	void add(TWin* w);
	void remove(TWin* w);
	int    count()   { return m_count; }
	TWin*  window(int i);
	bool visible();
	void show();
	void hide();
    void restore();
    void save();
};

#endif

 